Array 是一個有序的集合,可以存儲相同類型的元素。
初始化:
// 1. init時就有值
NSArray *arrayOne = [NSArray arrayWithObject:@"taiwan"];
// taiwan
// 2. init時為空,後來新增值進入array
NSMutableArray *arrayTwo = [NSMutableArray array];
[arrayTwo addObject:@"taiwan"];
[arrayTwo addObject:@123123];
//[tawian,123123]
NSArray
就像是 let array
,NSMutableArray
則像 var array
NSArray 是一個常數,初始化時給定參數後就無法再修改,used for read only
NSArray * array2;
array2 = [array2 arrayByAddingObject:obj];
這意味著創造一個新的 array 並將 pointer
更改為新創的 array。這方法會導致 Memory Leak,因為在創造新 array 前沒有清理舊的 array。
若要採用上述方式,必須要清理掉舊 array:
NSArray *oldArray;
NSArray *newArray;
newArray = [oldArray arrayByAddingObject:obj];
[oldArray release];
但如果想修改 array 最好的做法是使用 NSMutableArray
NSMutableArray *mutableArray;
// Initialisation etc
[mutableArray addObject:obj];
在 Objective-C 中,想要排序就需要用到一個工具,NSSortDescriptor
先準備一個 array,裡頭放亂序的數字
NSArray *array = @[@5,@3,@8,@6];
準備好排序規則,key 是指有沒有要按照什麼屬性排列,ascending 是代表要不要靠升序來排序。
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:nil ascending:YES];
執行排列
array = [array sortedArrayUsingDescriptors:@[sortDescriptor]];
結果
2021-09-30 22:18:06.529643+0800 TestOC[10875:200407] (
3,
5,
6,
8
)
準備一個 array
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"This",@"a",@"string", nil];
在 index = 1 插入 "is"
[array insertObject:@"is" atIndex:1];
NSLog(@"%@",array);
2021-09-30 22:42:34.140238+0800 TestOC[11046:214585] (
This,
is,
a,
string
)
與 Swift 不同的是,Objective-C 的 array 可以指定刪除哪個字,Swift 只能選擇位置
[array removeObject:@"This"];
NSLog(@"%@",array);
2021-09-30 22:42:34.140286+0800 TestOC[11046:214585] (
is,
a,
string
)
新增一個 array ,使用 containsObject 進行判斷
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"This",@"a",@"string", nil];
if ([array containsObject:@"a"]) {
NSLog(@"有 a 這個字串");
}
2021-09-30 22:48:42.959230+0800 TestOC[11080:218077] 有 a 這個字串